/**
 * 获取格式化日期时间（文件名安全格式）
 */
/**
 * 获取格式化日期时间（支持自定义格式）
 * @param {string} format - 格式化字符串，支持 YYYY, MM, DD, HH, mm, ss
 * @returns {string} 格式化后的时间字符串
 */
export function dateformat(date, format = "YYYY-MM-DD HH:mm:ss") {
  if (!date || !(date instanceof Date)) {
    return "";
  }
  const year = date.getFullYear();
  const month = String(date.getMonth() + 1).padStart(2, "0");
  const day = String(date.getDate()).padStart(2, "0");
  const hours = String(date.getHours()).padStart(2, "0");
  const minutes = String(date.getMinutes()).padStart(2, "0");
  const seconds = String(date.getSeconds()).padStart(2, "0");

  // 默认使用文件名安全的格式
  return format
    .replace("YYYY", year)
    .replace("MM", month)
    .replace("DD", day)
    .replace("HH", hours)
    .replace("mm", minutes)
    .replace("ss", seconds);
}

/**
 * 将秒数格式化为时间字符串
 * @param {number} seconds - 需要格式化的秒数
 * @returns {string} 格式化后的时间字符串，格式为 HH:mm:ss 或 mm:ss
 */
export const formatSeconds = (seconds) => {
  // 确保输入为非负整数
  const totalSeconds = Math.max(0, Math.floor(seconds));

  // 计算时、分、秒
  const hours = Math.floor(totalSeconds / 3600);
  const minutes = Math.floor((totalSeconds % 3600) / 60);
  const secs = totalSeconds % 60;

  // 格式化数字为两位数
  const pad = (num) => num.toString().padStart(2, "0");

  // 根据是否有小时部分决定返回格式
  if (hours > 0) {
    return `${pad(hours)}:${pad(minutes)}:${pad(secs)}`;
  } else {
    return `${pad(minutes)}:${pad(secs)}`;
  }
};

/**
 * 将秒数格式化为指定格式的时间字符串
 * @param {number} seconds - 需要格式化的秒数
 * @param {string} format - 格式化字符串，支持 HH:mm:ss 等格式
 * @returns {string} 格式化后的时间字符串
 */
export const formatSecondsForHMS = (seconds, format = "HH:mm:ss") => {
  // 确保输入为非负整数
  const totalSeconds = Math.max(0, Math.floor(seconds));

  // 计算时、分、秒
  const hours = Math.floor(totalSeconds / 3600);
  const minutes = Math.floor((totalSeconds % 3600) / 60);
  const secs = totalSeconds % 60;

  // 格式化数字为两位数
  const pad = (num) => num.toString().padStart(2, "0");

  // 根据格式字符串替换对应的时间部分
  return format.replace("HH", pad(hours)).replace("mm", pad(minutes)).replace("ss", pad(secs));
};
